package top.yj95.xiets.basic;

import java.util.Hashtable;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

/**
 * 文章《<a href="https://xiets.blog.csdn.net/article/details/74363768" target="_balnk">JavaSwing_2.12: JSlider（滑块）</a>》中的示例代码
 * @author 杨军
 * @since 2023-12-26
 */
public class CustomizeJSliderDemo {

    public static void main(String[] args) {
        JFrame frame = new JFrame("测试窗口");
        frame.setSize(250, 250);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        
        JPanel panel = new JPanel();
        
        // 创建一个滑块，最小值、最大值、初始值 分别为 0、20、10
        JSlider slider = new JSlider(0, 20, 10);
        
        // 设置主刻度间隔
        slider.setMajorTickSpacing(5);
        
        // 设置次刻度间隔
        slider.setMinorTickSpacing(1);
        
        // 绘制 刻度 和 标签
        slider.setPaintTicks(true);
        slider.setPaintLabels(true);
        
        // 设置滑块方向为垂直方向
        slider.setOrientation(SwingConstants.VERTICAL);
        
        // 给指定的刻度值显示自定义标签
        Hashtable<Integer, JComponent> labelTable = new Hashtable<>();
        labelTable.put(0, new JLabel("Start")); // 0 刻度位置，显示“Start”
        labelTable.put(10, new JLabel("Middle")); // 10 刻度位置，显示“Middle”
        labelTable.put(20, new JLabel("End")); // 20 刻度位置，显示“End”
        
        // 将刻度值和自定义标签的对应关系设置到滑块（设置后不再显示默认的刻度值）
        slider.setLabelTable(labelTable);
        
        // 添加刻度改变监听器
        slider.addChangeListener(e -> System.out.printf("当前值：%d\n", slider.getValue()));
        
        // 添加滑块到内容面板
        panel.add(slider);
        
        frame.setContentPane(panel);
        frame.setVisible(true);
    }
    
}
